home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / apps / 453 / rtxbind.s < prev    next >
Text File  |  1987-01-23  |  7KB  |  349 lines

  1. *************************************************************************
  2. *                                    *
  3. *    RTXBIND.S                            *
  4. *                                    *
  5. *    (C) Copyright 1986, Beckemeyer Development Tools        *
  6. *    All Rights Reserved                        *
  7. *                                    *
  8. *    RTX interface to Alcyon C.  These are re-entrant.        *
  9. *                                    *
  10. *************************************************************************
  11. .data
  12. errmsg:
  13.     dc.b    'Fatal: RTX Not Installed',$d,$a,0
  14.  
  15. .comm rtxbyte,1
  16.  
  17. .text
  18. rtx_fatal:
  19.     pea errmsg            * address message
  20.     move.w #9,-(sp)            * Cconws(errmsg)
  21.     trap #1                * enter GEMDOS
  22.     addq.l #6,sp            * pop stack
  23.     move.w #-70,-(sp)        * return -70 RTX error
  24.     move.w #$4c,-(sp)        * Pterm(-70)
  25.     trap #1                * enter GEMDOS
  26.     addq.l #6,sp            * loop if it returns
  27.     bra rtx_fatal
  28.     
  29.     
  30.     .globl _rtx_install
  31. _rtx_install:
  32.     pea 0                * go into supervisor mode
  33.     move.w #$20,-(sp)        * Super(0)
  34.     trap #1                * enter GEMDOS
  35.     move.b $94,rtxbyte        * check RTX vector
  36.     move.l d0,2(sp)            * set SSP back
  37.     move.w #$20,(sp)        * Super(savessp)
  38.     trap #1                * enter GEMDOS
  39.     addq.l #6,sp            * restore stack
  40.     tst.b rtxbyte            * RTX there?
  41.     bne rtx_fatal            * no, exit
  42. *
  43. * OK, now do RTX install
  44. *
  45.     move.l 4(sp),-(sp)        * root basepage address
  46.     move.w #0,-(sp)            * rtx_install
  47.     trap #5                * enter RTX
  48.     addq.l #6,sp
  49.     rts
  50.  
  51.     .globl _p_create
  52. _p_create:
  53.     link a6,#0
  54.     move.l 26(a6),-(sp)        * stack size
  55.     move.l 22(a6),-(sp)        * stack args
  56.     move.w 20(a6),-(sp)        * arg word count
  57.     move.l 16(a6),-(sp)        * load address
  58.     move.w 14(a6),-(sp)        * slice
  59.     move.w 12(a6),-(sp)        * priority
  60.     move.l  8(a6),-(sp)        * name    
  61.     move.w #1,-(sp)            * p_create
  62.     trap #5                * enter RTX
  63.     unlk a6                * restore stack 
  64.     rts
  65.  
  66.     .globl _p_delete
  67. _p_delete:
  68.     move.l 4(sp),-(sp)        * PID
  69.     move.w #2,-(sp)            * p_delete
  70.     trap #5                * enter RTX
  71.     addq.l #6,sp            * restore stack
  72.     rts
  73.  
  74.  
  75.     .globl _p_priority
  76. _p_priority:
  77.     link a6,#0
  78.     move.w 12(a6),-(sp)        * delta
  79.     move.l  8(a6),-(sp)        * PID
  80.     move.w #3,-(sp)            * p_priority
  81.     trap #5                * enter RTX
  82.     unlk a6
  83.     rts
  84.  
  85.     .globl _p_slice
  86. _p_slice:
  87.     link a6,#0
  88.     move.w 12(a6),-(sp)        * delta
  89.     move.l  8(a6),-(sp)        * PID
  90.     move.w #4,-(sp)            * p_slice
  91.     trap #5                * enter RTX
  92.     unlk a6
  93.     rts
  94.  
  95.     .globl _q_create
  96. _q_create:
  97.     link a6,#0
  98.     move.w 12(a6),-(sp)        * Q type
  99.     move.l  8(a6),-(sp)        * Q name
  100.     move.w #5,-(sp)            * q_create
  101.     trap #5                * enter RTX
  102.     unlk a6
  103.     rts
  104.  
  105.     .globl _q_delete
  106. _q_delete:
  107.     move.l 4(sp),-(sp)        * QID
  108.     move.w #6,-(sp)            * q_delete
  109.     trap #5                * enter RTX
  110.     addq.l #6,sp
  111.     rts
  112.  
  113.     .globl _q_send
  114. _q_send:
  115.     link a6,#0
  116.     move.l 12(a6),-(sp)        * messsage buffer
  117.     move.l  8(a6),-(sp)        * QID
  118.     move.w #7,-(sp)            * q_send    
  119.     trap #5                * enter RTX
  120.     unlk a6
  121.     rts
  122.  
  123.     .globl _q_req
  124. _q_req:
  125.     link a6,#0
  126.     move.l 18(a6),-(sp)        * timeout
  127.     move.w 16(a6),-(sp)        * nowait option
  128.     move.l 12(a6),-(sp)        * message buffer
  129.     move.l 8(a6),-(sp)        * QID
  130.     move.w #8,-(sp)            * q_req
  131.     trap #5                * enter RTX
  132.     unlk a6
  133.     rts
  134.  
  135.     .globl _q_jam
  136. _q_jam:
  137.     link a6,#0
  138.     move.l 12(a6),-(sp)        * messsage buffer
  139.     move.l  8(a6),-(sp)        * QID
  140.     move.w #9,-(sp)            * q_jam
  141.     trap #5                * enter RTX
  142.     unlk a6
  143.     rts
  144.  
  145.     .globl _e_signal
  146. _e_signal:
  147.     link a6,#0
  148.     move.w 12(a6),-(sp)        * event
  149.     move.l  8(a6),-(sp)        * PID
  150.     move.w #$a,-(sp)        * e_signal
  151.     trap #5                * enter RTX
  152.     unlk a6
  153.     rts
  154.  
  155.     .globl _e_wait
  156. _e_wait:
  157.     link a6,#0
  158.     move.l 14(a6),-(sp)        * timeout
  159.     move.w 12(a6),-(sp)        * condition
  160.     move.l  8(a6),-(sp)        * event buffer
  161.     move.w #$b,-(sp)        * e_wait
  162.     trap #5                * enter RTX
  163.     unlk a6
  164.     rts
  165.  
  166.     .globl _p_pause
  167. _p_pause:
  168.     move.l 4(sp),-(sp)        * timeout
  169.     move.w #$c,-(sp)        * p_pause
  170.     trap #5                * enter RTX
  171.     addq.l #6,sp
  172.     rts
  173.  
  174.     .globl _m_alloc
  175. _m_alloc:
  176.     move.l 4(sp),-(sp)        * size
  177.     move.w #$d,-(sp)        * m_alloc
  178.     trap #5                * enter RTX
  179.     addq.l #6,sp
  180.     rts
  181.  
  182.     .globl _m_free
  183. _m_free:
  184.     move.l 4(sp),-(sp)        * segment
  185.     move.w #$e,-(sp)        * m_free
  186.     trap #5                * enter RTX
  187.     addq.l #6,sp
  188.     rts
  189.  
  190.     .globl _m_assign
  191. _m_assign:
  192.     link a6,#0
  193.     move.l 12(a6),-(sp)        * PID
  194.     move.l  8(a6),-(sp)        * segment
  195.     move.w #$f,-(sp)        * m_assign
  196.     trap #5                * enter RTX
  197.     unlk a6
  198.     rts
  199.  
  200.     .globl _p_lookup
  201. _p_lookup:
  202.     move.l 4(sp),-(sp)        * name
  203.     move.w #$10,-(sp)        * p_lookup
  204.     trap #5                * enter RTX
  205.     addq.l #6,sp
  206.     rts
  207.  
  208.     .globl _q_lookup
  209. _q_lookup:
  210.     move.l 4(sp),-(sp)        * Q name
  211.     move.w #$11,-(sp)        * q_lookup
  212.     trap #5                * enter RTX
  213.     addq.l #6,sp
  214.     rts
  215.  
  216.     .globl _p_info
  217. _p_info:
  218.     link a6,#0
  219.     move.l 12(a6),-(sp)        * state buffer
  220.     move.l 8(a6),-(sp)        * PID
  221.     move.w #$12,-(sp)        * p_info
  222.     trap #5                * enter RTX
  223.     unlk a6
  224.     rts
  225.  
  226.     .globl _p_vector
  227. _p_vector:
  228.     link a6,#0
  229.     move.l 12(a6),-(sp)        * vector
  230.     move.l 8(a6),-(sp)        * PID
  231.     move.w #$13,-(sp)        * p_vector
  232.     trap #5                * enter RTX
  233.     unlk a6
  234.     rts
  235.  
  236.     .globl _p_suspend
  237. _p_suspend:
  238.     link a6,#0
  239.     move.l 8(a6),-(sp)        * PID
  240.     move.w #$14,-(sp)        * p_suspend
  241.     trap #5                * enter RTX
  242.     unlk a6
  243.     rts
  244.  
  245.  
  246.     .globl _p_resume
  247. _p_resume:
  248.     link a6,#0
  249.     move.l 8(a6),-(sp)        * PID
  250.     move.w #$15,-(sp)        * p_resume
  251.     trap #5                * enter RTX
  252.     unlk a6
  253.     rts
  254.  
  255.     .globl _d_install
  256. _d_install:
  257.     link a6,#0
  258.     move.l 30(a6),-(sp)        * cntrl
  259.     move.l 26(a6),-(sp)        * costat
  260.     move.l 22(a6),-(sp)        * conout
  261.     move.l 18(a6),-(sp)        * conin
  262.     move.l 14(a6),-(sp)        * constat
  263.     move.l 10(a6),-(sp)        * name
  264.     move 8(a6),-(sp)        * unit
  265.     move #$16,-(sp)            * d_install
  266.     trap #5                * enter RTX
  267.     unlk a6
  268.     rts
  269.  
  270.     .globl _d_cntrl
  271. _d_cntrl:
  272.     link a6,#0
  273.     move.l 10(a6),-(sp)        * long word parameter
  274.     move.w 8(a6),-(sp)        * unit number
  275.     move.w #$17,-(sp)        * d_cntrl
  276.     trap #5                * enter RTX
  277.     unlk a6
  278.     rts
  279.  
  280.     .globl _q_info
  281. _q_info:
  282.     link a6,#0
  283.     move.l 16(a6),-(sp)        * num proc
  284.     move.l 12(a6),-(sp)        * num msg
  285.     move.l 8(a6),-(sp)        * qid
  286.     move.w #$18,-(sp)        * q_info
  287.     trap #5                * enter RTX
  288.     unlk a6
  289.     rts
  290.  
  291.     .globl _rtx_remove
  292. _rtx_remove:
  293.     move.w #255,-(sp)        * rtx_remove
  294.     trap #5                * enter RTX
  295.     addq.l #2,sp
  296.     rts
  297.  
  298. *************************************************************************
  299. *                                    *
  300. *    BIOS, XBIOS, and GEMDOS re-entrant interface for RTX        *
  301. *                                    *
  302. *************************************************************************
  303.     .globl _bios
  304. .text
  305. _bios:
  306.     move #201,-(sp)
  307.     trap #5            * save real return address
  308.     addq.l #6,sp        * pop return off stack
  309.     trap #13
  310.     move.l d0,-(sp)        * save return value
  311.     move #203,-(sp)
  312.     trap #5            * save real return address
  313.     addq.l #2,sp
  314.     move.l d0,a0
  315.     move.l (sp)+,d0        * set up return value
  316.     jmp (a0)
  317.  
  318.     .globl _xbios
  319. .text
  320. _xbios:
  321.     move #201,-(sp)
  322.     trap #5            * save real return address
  323.     addq.l #6,sp        * pop return off stack
  324.     trap #14
  325.     move.l d0,-(sp)        * save return value
  326.     move #203,-(sp)
  327.     trap #5            * save real return address
  328.     addq.l #2,sp
  329.     move.l d0,a0
  330.     move.l (sp)+,d0        * set up return value
  331.     jmp (a0)
  332.  
  333.     .globl _gemdos
  334. .text
  335. _gemdos:
  336.     move #201,-(sp)
  337.     trap #5            * save real return address
  338.     addq.l #6,sp        * pop return off stack
  339.     trap #1    
  340.     move.l d0,-(sp)        * save return value
  341.     move #203,-(sp)
  342.     trap #5            * save real return address
  343.     addq.l #2,sp
  344.     move.l d0,a0
  345.     move.l (sp)+,d0        * set up return value
  346.     jmp (a0)
  347.  
  348. .data
  349.